package com.aigou.admin.aigouspringboot.controller.admin;

import com.aigou.admin.aigouspringboot.common.LogScope;
import com.aigou.admin.aigouspringboot.entity.Brand;
import com.aigou.admin.aigouspringboot.result.Result;
import com.aigou.admin.aigouspringboot.service.BrandService;
import com.aigou.admin.aigouspringboot.utils.RandomUtil;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * @Author Mr.LiFuXing
 * @Date 2024/12/10 20:22
 * @Title BrandController
 * @Package com.aigou.admin.aigouspringboot.controller
 */
@RestController("adminBrand")
@RequestMapping("/admin/brand")
@Slf4j
public class BrandController {

    @Resource
    private BrandService brandService;

    /**
     * 分页查询品牌列表
     *
     * @param current 当前页码
     * @return 包含品牌列表信息的分页结果对象
     */
    @GetMapping
    @LogScope(title = "品牌管理模块", content = "查看品牌列表信息")
    public Result select(@RequestParam Integer current) {

        log.info("查询第{}页的品牌信息", current);
        // 分页查询，返回PageInfo（分页插件工具）
        PageInfo<Brand> brandPageInfo = brandService.selectBrandListByPage(current);
        return Result.success(brandPageInfo);
    }

    /**
     * 根据id查询品牌详细信息
     *
     * @param id 品牌的唯一标识id
     * @return 对应的品牌对象，若查询成功则包含品牌详细信息，否则返回相应错误提示
     */
    @GetMapping("/{id}")
    @LogScope(title = "品牌管理模块", content = "根据id查询品牌信息")
    public Result detail(@PathVariable String id) {

        Brand brand = brandService.selectById(id);
        return Result.success(brand);
    }

    /**
     * 根据id删除品牌信息
     *
     * @param id 品牌的唯一标识id
     * @return 若删除操作成功返回成功结果，否则返回失败结果
     */
    @DeleteMapping("/{id}")
    @LogScope(title = "品牌管理模块", content = "根据id删除品牌信息")
    public Result delete(@PathVariable String id) {

        int i = brandService.deleteById(id);
        return i > 0? Result.success() : Result.error();
    }

    /**
     * 编辑品牌信息
     *
     * @param brand 包含修改后品牌数据的对象
     * @return 若编辑操作成功返回成功结果，否则返回失败结果
     */
    @PutMapping
    @LogScope(title = "品牌管理模块", content = "编辑品牌信息")
    public Result edit(@RequestBody Brand brand) {

        int i = brandService.edit(brand);
        return i > 0? Result.success() : Result.error();
    }

    /**
     * 添加品牌信息
     *
     * @param brand 要添加的品牌对象
     * @return 若添加操作成功返回成功结果，否则返回失败结果
     */
    @PostMapping("/save")
    @LogScope(title = "品牌管理模块", content = "添加品牌信息")
    public Result save(@RequestBody Brand brand) {

        brand.setId(RandomUtil.getRandomNumber());
        int i = brandService.save(brand);
        return i > 0? Result.success() : Result.error();
    }
}